#ifndef SOMFY_CURTAIN_CTRL_DRIVER_H
#define SOMFY_CURTAIN_CTRL_DRIVER_H

#include "common.h"
#include "stdint.h"

/**
*说明：尚飞窗帘电机控制协议
*协议格式： 起始位 						设备地址  			控制位 	校验
*
*	例 ：    7F F2 FA 01 00 00 	DD FF FF 		FF FE 	07 44
*
*		     地址位计算：DD FF FF ：① DD FF FF 取反 22 00 00 
*
*									② 0x0740 + 地址位 = 0x0766(固定值)
*
*协议暂时不全 ，根据串口配置工具进行控制指令的获取，然后记录到网关。
*
**/

/*调试开关*/
#define DEBUG_SOMFY_CURTAIN_CONTROL_ENABLE 0x01

#if DEBUG_SOMFY_CURTAIN_CONTROL_ENABLE == 0x01
#define SOMFY_CURTAIN_LOG(a)	LOGD(a)
#else
#define SOMFY_CURTAIN_LOG(a) {}
#endif

/*最小接收帧长度*/
#define SOMFY_CURTAIN_CONTROL_RECV_FRAME_MINI_LENGTH 0X0D
#define SOMFY_CURTAIN_CONTROL_START_CODE {0x7f,0xf2,0xfa,0x01,0x00,0x00} /*每种窗帘对应一种起始字段*/

#define SOMFY_CURTAIN_CONTROL_START_CODE_LENGTH 0x06

/*尚飞窗帘电机校验和恒定值*/
#define SOMFY_CURTAIN_CHECK_SUM 0X0766

/**
**控制码定义
**/
typedef enum
{
	SOMFY_CURTAIN_OPEN = 0XFFFE,    	/*窗帘开*/
    SOMFY_CURTAIN_CLOSE = 0XFFFD,		/*窗帘关*/
    SOMFY_CURTAIN_STOP = 0XFFFC,	/*窗帘停*/
	
}STRU_SOMFY_CURTAIN_CTRL_FUNCODE;


/**窗帘控制命令信息*/
typedef struct 
{
	uint8_t startcode[6] ;
	uint8_t deviceid[3];
	uint8_t funcode[2];
	uint8_t crc[2];
	
}STRUCT_SOMFY_CURTAIN_CONTROL_CMDLINE;

typedef struct
{

	uint32_t serialbautrate; /*串口波特率*/
	uint8_t serialinitok;

	uint8_t channelid;
	uint8_t prototype;
	uint8_t startcodeindex;	/*起始码索引*/
	
	uint32_t devid;
	uint8_t curtaininfo[64];
	
}STRUCT_SOMFY_CURTAIN_INFO;

/*存储状态的参数及状态信息*/
extern STRUCT_SOMFY_CURTAIN_INFO StruSomfyCurtainInfo;
extern STRUCT_SOMFY_CURTAIN_CONTROL_CMDLINE struSomfyCurtainControl;

/*外部接口定义*/
extern void somfy_curtain_control_init(uint8_t channel ,uint32_t bautrate,uint8_t initstate);

extern uint8_t somfy_curtain_control_pack_data(uint32_t deviceid,uint16_t funcode,uint8_t dataadd,uint8_t srcdatalen,int32_t *pdata,uint8_t * destdata);
extern uint8_t somfy_curtain_control_unpack_data(uint8_t *pdata,uint8_t len,uint32_t devid,uint16_t func,uint8_t dataadd,uint8_t num);
extern uint8_t somfy_curtain_control_read_data(uint32_t deviceid,uint16_t funcode,uint8_t dataadd,uint8_t srcdatalen,uint8_t * destdata);
extern uint8_t somfy_curtain_get_cmd_channel(uint8_t * channel);

extern uint16_t get_crc (uint32_t data);
#endif
